Load code
Variables
Load data
Single lemma
Load data
Check uses and edges
df_comp %>%
filter(LEMMA == 'hyperlocal') %>%
select(LEMMA, USES_TOT, SUBSET, USES)
Case studies
Data overview
Usage frequency
Overall across cases
df_comp %>%
filter(
LEMMA %in% cases,
SUBSET == 'full'
) %>%
arrange(desc(USES_TOT))
Uses in first subset
df_comp %>%
filter(
SUBSETTING == 'time',
SUBSET == 'one'
) %>%
select(LEMMA, USES_TOT, USES) %>%
arrange(USES)
Degree centralization
Diachronic
plt <- df_comp %>%
select(LEMMA, SUBSETTING, SUBSET, CENT_DEGREE, CENT_EV) %>%
filter(
SUBSET != 'full',
LEMMA %in% cases
# LEMMA %in% c(cases, 'hyperlocal', 'blockchain', 'climate denial', 'man bun', 'upskill', 'deep learning')
# overtourism: diff too big for case study scale;
# , 'broflake', 'climate crisis', 'incel', 'overtourism'
) %>%
ggplot(., aes(x=SUBSET, y=CENT_DEGREE)) + # group=1
geom_point(aes(group=LEMMA, color=LEMMA, shape=LEMMA)) +
geom_line(aes(group=LEMMA, color=LEMMA, linetype=LEMMA)) +
guides(group=TRUE) +
ggtitle('Diffusion over time: changes in degree centralization') +
scale_y_continuous('degree centrality') +
scale_x_discrete('subset')
ggplotly(plt)
# ggsave('out/cases_cent_diac.pdf', width=6, height=4)
Overall
df_comp %>%
filter(
LEMMA %in% cases,
SUBSET == 'full'
) %>%
select(
LEMMA,
EDGES,
CENT_DEGREE,
CENT_EV
) %>%
arrange((CENT_DEGREE))
Full sample
Usage intensity
df_comp %>%
filter(SUBSET == 'full') %>%
arrange(desc(USES))
Edges
Degree centrality
Overall
List
df_comp %>%
select(LEMMA, SUBSET, USES_TOT, CENT_DEGREE, CENT_EV) %>%
filter(
SUBSET == 'full'
# USES >= 2
) %>%
arrange(
(CENT_DEGREE)
# desc(CENT_EV)
)
Plot
plt <- df_comp %>%
select(LEMMA, SUBSET, USES, CENT_DEGREE) %>%
filter(SUBSET == 'full') %>%
arrange((CENT_DEGREE)) %>%
ggplot(., aes(x=CENT_DEGREE, y=reorder(LEMMA, CENT_DEGREE))) +
geom_point() +
scale_y_discrete('lemmas') +
scale_x_continuous(
'degree centralization (log)',
trans='log'
)
plt

# ggsave('out/cent_sync_all.pdf', width=6, height=4)
Over time
Across all lemmas
df_comp %>%
filter(
SUBSET %in% c('one', 'two', 'three', 'four'),
LEMMA %in% successful_diffs
# USES_TOT >= 10000
# USES > 10000
) %>%
group_by(SUBSET) %>%
summarize(CENT_AVG = mean(CENT_DEGREE)) %>%
ggplot(., aes(x=SUBSET, y=CENT_AVG, group=1)) +
geom_line() +
geom_point() +
scale_y_continuous('degree centralization') +
scale_x_discrete('subsets')

# ggsave('out/full_cent_diac.pdf', width=6, height=4)
Biggest changes
df_comp %>%
select(LEMMA, SUBSET, CENT_DEGREE, EDGES, USES_TOT) %>%
filter(
SUBSET %in% c(
'one',
'four'
),
USES_TOT >= 10000
) %>%
dplyr::group_by(LEMMA) %>%
dplyr::mutate(CENT_DIFF = CENT_DEGREE - lag(CENT_DEGREE, default=CENT_DEGREE[1])) %>%
drop_na() %>%
select(-SUBSET) %>%
rename(
CENT_LAST = CENT_DEGREE,
EDGES_LAST = EDGES
) %>%
arrange((CENT_DIFF))
Frequency vs. networks
Frequency vs. centralization
Plot
plt <- df_comp %>%
filter(
SUBSET == 'four',
# USES_TOT %in% (150000:500000)
# LEMMA %in% c(cases)
# !LEMMA %in% c('slut shaming', 'dashcam', 'shareable', 'cuckold', 'deep learning', 'hyperlocal')
) %>%
select(LEMMA, CENT_DEGREE, USES_TOT, USES, EDGES) %>%
ggplot(., aes(x=CENT_DEGREE, y=USES_TOT)) +
geom_text(aes(label=LEMMA), hjust=-0.1, vjust=-0.1) +
# geom_point() +
scale_y_continuous(
'usage frequency (log)',
trans='log'
) +
scale_x_continuous(
'degree centralization'
# trans='log'
)
ggplotly(plt)
# ggsave('out/full_cent_freq_overall.pdf', width=6, height=4)
# ggsave('out/cases_cent_freq_overall.pdf', width=6, height=4)
Biggest discrepancies
df_comp %>%
filter(
SUBSETTING == 'time',
SUBSET == 'four'
) %>%
select(LEMMA, USES_TOT, CENT_DEGREE) %>%
mutate(DISC = USES_TOT / CENT_DEGREE) %>%
arrange(DISC)
Correlation
df_corr <- df_comp %>%
filter(
# SUBSET != 'full'
# EDGES >= 100
) %>%
select(-c(LEMMA, SUBSET, START, END, SKIP, STAMP))
cor.test(df_corr$USES, df_corr$CENT_DEGREE)
Pearson's product-moment correlation
data: df_corr$USES and df_corr$CENT_DEGREE
t = -2.3949, df = 517, p-value = 0.01698
alternative hypothesis: true correlation is not equal to 0
95 percent confidence interval:
-0.18911153 -0.01884815
sample estimates:
cor
-0.1047473
Coefficient of variation
df_comp %>%
filter(
SUBSET == 'full',
USES_TOT >= 1000
) %>%
select(LEMMA, USES_TOT, COEF_VAR) %>%
arrange(desc(COEF_VAR))
Processing status
Lemma list
df_comp %>%
select(LEMMA, SUBSET, STAMP) %>%
filter(SUBSET == 'four') %>%
# mutate(STAMP = as_datetime(STAMP)) %>%
arrange(desc(STAMP))
Dataset statistics
df_comp %>%
filter(SUBSET == 'full') %>%
select(LEMMA, SUBSET, USES_TOT, USERS_TOT) %>%
dplyr::summarise(
USES_ALL = sum(USES_TOT),
USERS_ALL = sum(USERS_TOT)
)
LS0tCmF1dGhvcjogJ1F1aXJpbiBXw7xyc2NoaW5nZXInCnRpdGxlOiAiU29jaWFsIG5ldHdvcmtzIG9mIGxleGljYWwgaW5ub3ZhdGlvbiIKb3V0cHV0OiAKICBodG1sX25vdGVib29rOiAKICAgIHRvYzogeWVzCi0tLQoKIyBMb2FkIGNvZGUKCmBgYHtyIGluY2x1ZGU9RkFMU0V9CnNvdXJjZSgnc3JjL2xvYWQtZGF0YS5SJykKc291cmNlKCdzcmMvcG9zdHByb2MuUicpCnNvdXJjZSgnc3JjL3VzZXMuUicpCnNvdXJjZSgnc3JjL3VzZXJzLlInKQpzb3VyY2UoJ3NyYy9zbmEuUicpCgpsaWJyYXJ5KGNvcnJyKQpsaWJyYXJ5KHRpZHlyKQpsaWJyYXJ5KG1hZ3JpdHRyKQpgYGAKCgojIFZhcmlhYmxlcwoKYGBge3IgaW5jbHVkZT1GQUxTRX0Kc3Vic2V0dGluZyA9ICd0aW1lJwpkaWZmX3N0YXJ0X21ldGhvZCA8LSAnZWRnZXMnCmRpZmZfc3RhcnRfbGltaXQgPC0gMwoKY2FzZXMgPC0gYygKICAnZ2hvc3RpbmcnLCAKICAnbGl0dWF0aW9uJywgCiAgJ2FsdC1sZWZ0JywgCiAgJ3NvbG9wcmVuZXVyJywKICAnaHlwZXJsb2NhbCcsCiAgJ3VwY3ljbGluZycKICApCgpgYGAKCgojIExvYWQgZGF0YQoKYGBge3IgaW5jbHVkZT1GQUxTRX0KaWYgKGV4aXN0cygnZGZfY29tcCcpID09IEZBTFNFKSB7CiAgZGZfY29tcCA8LSByZWFkX2RmX2NvbXAoZl9wYXRoPSdvdXQvZGZfY29tcC5jc3YnKQp9CmBgYAoKCiMgRmlsdGVyIGRhdGEKCmBgYHtyIGluY2x1ZGU9RkFMU0V9CmRmX2NvbXAgJTw+JSAKICBmaWx0ZXIoCiAgICBTS0lQICE9IFRSVUUsCiAgICBTVUJTRVRUSU5HID09IHN1YnNldHRpbmcsCiAgICAjIGVzdGFibGlzaGVkIHdvcmRzCiAgICAhTEVNTUEgJWluJSBjKCdBbmdsby1TYXhvbicsICdjbGltYXRlIGNyaXNpcycsICdnbG9iYWwgaGVhdGluZycsICdncmVlbndhc2hpbmcnLCAncG9saXRpY2FsIGNvcnJlY3RuZXNzJywgJ3JlZnVnZWUgY3Jpc2lzICcpCiAgICAjIHN1Y2Nlc3NmdWwgd29yZHM6IFVTRVNfVE9UID49IDEwMDAwCiAgICAjIHVuc3VjY2Vzc2Z1bCB3b3JkczogVVNFU19UT1QgPD0gMTAwMDAKICAgICMgd2VpcmQgd29yZHM6IGJpZyBkaWNrIGVuZXJneQogICkKYGBgCgoKIyMgc3VjY2VzcwoKYGBge3J9CmRmX2NvbXAgJT4lCiAgc2VsZWN0KExFTU1BLCBTVUJTRVQsIFVTRVMsIENFTlRfREVHUkVFKSAlPiUKICBmaWx0ZXIoU1VCU0VUICE9ICdmdWxsJykgJT4lCiAgZ3JvdXBfYnkoTEVNTUEpICU+JQogIG11dGF0ZShESUZGX1VTRVMgPSBVU0VTIC0gbGFnKFVTRVMpKSAlPiUKICBtdXRhdGUoRElGRl9VU0VTX1RPVCA9IHN1bShESUZGX1VTRVMsIG5hLnJtPVRSVUUpKSAlPiUKICBmaWx0ZXIoU1VCU0VUID09ICdmb3VyJykgJT4lCiAgYXJyYW5nZShESUZGX1VTRVNfVE9UKQoKc3VjY2Vzc2Z1bF9kaWZmcyA8LSBkZl9zdWNjZXNzICU+JQogIGZpbHRlcihESUZGX1VTRVNfVE9UID4gMCkgJT4lCiAgcHVsbChMRU1NQSkKCnVuc3VjY2Vzc2Z1bF9kaWZmcyA8LSBkZl9zdWNjZXNzICU+JQogIGZpbHRlcihESUZGX1VTRVNfVE9UIDwgMCkgJT4lCiAgcHVsbChMRU1NQSkKCnN1Y2Nlc3NmdWxfdXNlc19taW4gPC0gZGZfY29tcCAlPiUKICBmaWx0ZXIoVVNFUyA+IDEwMDApICU+JQogIHB1bGwoTEVNTUEpCiAgCiAgCnVuc3VjY2Vzc2Z1bF91c2VzX21pbiA8LSBkZl9jb21wICU+JQogIGZpbHRlcihVU0VTIDwgMTAwMCkgJT4lCiAgcHVsbChMRU1NQSkKYGBgCgoKIyBTaW5nbGUgbGVtbWEKCiMjIExvYWQgZGF0YQoKYGBge3IgaW5jbHVkZT1GQUxTRX0KY29ycHVzIDwtICcvVm9sdW1lcy9xamQvdHdpbnQvJwpsZW1tYSA8LSAnYmlnIGRpY2sgZW5lcmd5JwoKdHdlZXRzIDwtIGxvYWRfZGF0YShjb3JwdXMsIGxlbW1hKQp0d2VldHMgPC0gcG9zdHByb2ModHdlZXRzKQp0d2VldHMgPC0gZmlsdGVyX3R3ZWV0cyh0d2VldHMpCmBgYAoKCiMjIENoZWNrIHR3ZWV0cwoKYGBge3J9CnR3ZWV0cyAlPiUKICBzZWxlY3QodHdlZXQsIGRhdGUpICU+JQogICMgc2xpY2UoLiwgc2FtcGxlKDE6bigpKSkgI3JhbmRvbSBzZWxlY3Rpb24KICBhcnJhbmdlKGRhdGUpCmBgYAoKCiMjIENoZWNrIHVzZXMgYW5kIGVkZ2VzCgpgYGB7cn0KZGZfY29tcCAlPiUKICBmaWx0ZXIoTEVNTUEgPT0gJ2h5cGVybG9jYWwnKSAlPiUKICBzZWxlY3QoTEVNTUEsIFVTRVNfVE9ULCBTVUJTRVQsIFVTRVMpCmBgYAoKCiMgQ2FzZSBzdHVkaWVzCgojIyBEYXRhIG92ZXJ2aWV3CgpgYGB7ciBpbmNsdWRlPUZBTFNFfQpkZl9jb21wICU+JQogIGZpbHRlcigKICAgIExFTU1BICVpbiUgY2FzZXMsCiAgICBTVUJTRVQgPT0gJ2Z1bGwnCiAgICApICU+JQogIHNlbGVjdChMRU1NQSwgVVNFUz1VU0VTX1RPVCwgU1BFQUtFUlM9VVNFUlNfVE9UKSAlPiUKICBtdXRhdGUoVVNFU19QRVJfU1BFQUtFUiA9IFVTRVMgLyBTUEVBS0VSUykgJT4lCiAgYXJyYW5nZShkZXNjKFVTRVMpKQogICMgZ2dwbG90KGRhdGE9LiwgYWVzKHg9VVNFUlNfVE9ULCB5PVVTRVNfVE9UKSkgKwogICMgICBnZW9tX3RleHQoYWVzKGxhYmVsPUxFTU1BKSkgKwogICMgICBzY2FsZV95X2NvbnRpbnVvdXMoJ2ZyZXF1ZW5jeSAobG9nKScsIHRyYW5zPSdsb2cnKQpgYGAKCgojIyBVc2FnZSBmcmVxdWVuY3kKCiMjIyBPdmVyYWxsIGFjcm9zcyBjYXNlcwoKYGBge3J9CmRmX2NvbXAgJT4lCiAgZmlsdGVyKAogICAgTEVNTUEgJWluJSBjYXNlcywKICAgIFNVQlNFVCA9PSAnZnVsbCcKICAgICkgJT4lCiAgIGFycmFuZ2UoZGVzYyhVU0VTX1RPVCkpCmBgYAoKCiMjIyBVc2VzIGluIGZpcnN0IHN1YnNldAoKYGBge3J9CmRmX2NvbXAgJT4lCiAgZmlsdGVyKAogICAgU1VCU0VUVElORyA9PSAndGltZScsCiAgICBTVUJTRVQgPT0gJ29uZScKICAgICkgJT4lCiAgc2VsZWN0KExFTU1BLCBVU0VTX1RPVCwgVVNFUykgJT4lCiAgYXJyYW5nZShVU0VTKQpgYGAKCgoKIyMgRGVncmVlIGNlbnRyYWxpemF0aW9uCgojIyMgRGlhY2hyb25pYwoKYGBge3J9CnBsdCA8LSBkZl9jb21wICU+JQogIHNlbGVjdChMRU1NQSwgU1VCU0VUVElORywgU1VCU0VULCBDRU5UX0RFR1JFRSwgQ0VOVF9FVikgJT4lCiAgZmlsdGVyKAogICAgU1VCU0VUICE9ICdmdWxsJywKICAgIExFTU1BICVpbiUgY2FzZXMKICAgICMgTEVNTUEgJWluJSBjKGNhc2VzLCAnaHlwZXJsb2NhbCcsICdibG9ja2NoYWluJywgJ2NsaW1hdGUgZGVuaWFsJywgJ21hbiBidW4nLCAndXBza2lsbCcsICdkZWVwIGxlYXJuaW5nJykKICAgICMgb3ZlcnRvdXJpc206IGRpZmYgdG9vIGJpZyBmb3IgY2FzZSBzdHVkeSBzY2FsZTsgCiAgICAjICwgJ2Jyb2ZsYWtlJywgJ2NsaW1hdGUgY3Jpc2lzJywgJ2luY2VsJywgJ292ZXJ0b3VyaXNtJwogICkgJT4lCiAgZ2dwbG90KC4sIGFlcyh4PVNVQlNFVCwgeT1DRU5UX0RFR1JFRSkpICsgIyBncm91cD0xCiAgICBnZW9tX3BvaW50KGFlcyhncm91cD1MRU1NQSwgY29sb3I9TEVNTUEsIHNoYXBlPUxFTU1BKSkgKwogICAgZ2VvbV9saW5lKGFlcyhncm91cD1MRU1NQSwgY29sb3I9TEVNTUEsIGxpbmV0eXBlPUxFTU1BKSkgKwogICAgZ3VpZGVzKGdyb3VwPVRSVUUpICsKICAgIGdndGl0bGUoJ0RpZmZ1c2lvbiBvdmVyIHRpbWU6IGNoYW5nZXMgaW4gZGVncmVlIGNlbnRyYWxpemF0aW9uJykgKwogICAgc2NhbGVfeV9jb250aW51b3VzKCdkZWdyZWUgY2VudHJhbGl0eScpICsKICAgIHNjYWxlX3hfZGlzY3JldGUoJ3N1YnNldCcpCgpnZ3Bsb3RseShwbHQpCiMgZ2dzYXZlKCdvdXQvY2FzZXNfY2VudF9kaWFjLnBkZicsIHdpZHRoPTYsIGhlaWdodD00KQpgYGAKCgojIyMgT3ZlcmFsbAoKYGBge3J9CmRmX2NvbXAgJT4lCiAgZmlsdGVyKAogICAgTEVNTUEgJWluJSBjYXNlcywKICAgIFNVQlNFVCA9PSAnZnVsbCcKICAgICkgJT4lCiAgc2VsZWN0KAogICAgTEVNTUEsIAogICAgRURHRVMsCiAgICBDRU5UX0RFR1JFRSwgCiAgICBDRU5UX0VWCiAgICApICU+JQogIGFycmFuZ2UoKENFTlRfREVHUkVFKSkKYGBgCgoKIyBGdWxsIHNhbXBsZQoKIyMgVXNhZ2UgaW50ZW5zaXR5CgpgYGB7cn0KZGZfY29tcCAlPiUKICBmaWx0ZXIoU1VCU0VUID09ICdmdWxsJykgJT4lCiAgYXJyYW5nZShkZXNjKFVTRVMpKQpgYGAKCgojIyBFZGdlcwoKYGBge3IgaW5jbHVkZT1GQUxTRX0KZGZfY29tcCAlPiUKICBkcGx5cjo6Z3JvdXBfYnkoTEVNTUEpICU+JQogIGZpbHRlcihTVUJTRVQgPT0gJ29uZScpICU+JQogIHNlbGVjdChMRU1NQSwgU1VCU0VULCBVU0VTLCBFREdFUykgJT4lCiAgYXJyYW5nZShFREdFUykKYGBgCgoKIyMgRGVncmVlIGNlbnRyYWxpdHkKCiMjIyBPdmVyYWxsCgojIyMjIExpc3QKCmBgYHtyfQpkZl9jb21wICU+JQogIHNlbGVjdChMRU1NQSwgU1VCU0VULCBVU0VTX1RPVCwgQ0VOVF9ERUdSRUUsIENFTlRfRVYpICU+JQogIGZpbHRlcigKICAgIFNVQlNFVCA9PSAnZnVsbCcKICAgICMgVVNFUyA+PSAyCiAgICApICU+JQogIGFycmFuZ2UoCiAgICAoQ0VOVF9ERUdSRUUpCiAgICAjIGRlc2MoQ0VOVF9FVikKICApCmBgYAoKCiMjIyMgUGxvdAoKYGBge3J9CnBsdCA8LSBkZl9jb21wICU+JQogIHNlbGVjdChMRU1NQSwgU1VCU0VULCBVU0VTLCBDRU5UX0RFR1JFRSkgJT4lCiAgZmlsdGVyKFNVQlNFVCA9PSAnZnVsbCcpICU+JQogIGFycmFuZ2UoKENFTlRfREVHUkVFKSkgJT4lCiAgZ2dwbG90KC4sIGFlcyh4PUNFTlRfREVHUkVFLCB5PXJlb3JkZXIoTEVNTUEsIENFTlRfREVHUkVFKSkpICsKICAgIGdlb21fcG9pbnQoKSArCiAgICBzY2FsZV95X2Rpc2NyZXRlKCdsZW1tYXMnKSArCiAgICBzY2FsZV94X2NvbnRpbnVvdXMoCiAgICAgICdkZWdyZWUgY2VudHJhbGl6YXRpb24gKGxvZyknLAogICAgICB0cmFucz0nbG9nJwogICAgICApCgpwbHQKCiMgZ2dzYXZlKCdvdXQvY2VudF9zeW5jX2FsbC5wZGYnLCB3aWR0aD02LCBoZWlnaHQ9NCkKYGBgCgoKIyMjIE92ZXIgdGltZQoKIyMjIyBBY3Jvc3MgYWxsIGxlbW1hcwoKYGBge3J9CmRmX2NvbXAgJT4lCiAgZmlsdGVyKAogICAgU1VCU0VUICVpbiUgYygnb25lJywgJ3R3bycsICd0aHJlZScsICdmb3VyJyksCiAgICBMRU1NQSAlaW4lIHN1Y2Nlc3NmdWxfZGlmZnMKICAgICMgVVNFU19UT1QgPj0gMTAwMDAKICAgICMgVVNFUyA+IDEwMDAwCiAgICApICU+JQogIGdyb3VwX2J5KFNVQlNFVCkgJT4lCiAgc3VtbWFyaXplKENFTlRfQVZHID0gbWVhbihDRU5UX0RFR1JFRSkpICU+JQogIGdncGxvdCguLCBhZXMoeD1TVUJTRVQsIHk9Q0VOVF9BVkcsIGdyb3VwPTEpKSArCiAgICBnZW9tX2xpbmUoKSArCiAgICBnZW9tX3BvaW50KCkgKwogICAgc2NhbGVfeV9jb250aW51b3VzKCdkZWdyZWUgY2VudHJhbGl6YXRpb24nKSArCiAgICBzY2FsZV94X2Rpc2NyZXRlKCdzdWJzZXRzJykKCiMgZ2dzYXZlKCdvdXQvZnVsbF9jZW50X2RpYWMucGRmJywgd2lkdGg9NiwgaGVpZ2h0PTQpCmBgYAoKCiMjIyMgQmlnZ2VzdCBjaGFuZ2VzCgpgYGB7cn0KZGZfY29tcCAlPiUKICBzZWxlY3QoTEVNTUEsIFNVQlNFVCwgQ0VOVF9ERUdSRUUsIEVER0VTLCBVU0VTX1RPVCkgJT4lCiAgZmlsdGVyKAogICAgU1VCU0VUICVpbiUgYygKICAgICAgJ29uZScsIAogICAgICAnZm91cicKICAgICAgKSwKICAgIFVTRVNfVE9UID49IDEwMDAwCiAgICApICU+JQogIGRwbHlyOjpncm91cF9ieShMRU1NQSkgJT4lCiAgZHBseXI6Om11dGF0ZShDRU5UX0RJRkYgPSBDRU5UX0RFR1JFRSAtIGxhZyhDRU5UX0RFR1JFRSwgZGVmYXVsdD1DRU5UX0RFR1JFRVsxXSkpICU+JQogIGRyb3BfbmEoKSAlPiUKICBzZWxlY3QoLVNVQlNFVCkgJT4lCiAgcmVuYW1lKAogICAgQ0VOVF9MQVNUID0gQ0VOVF9ERUdSRUUsCiAgICBFREdFU19MQVNUID0gRURHRVMKICAgICkgJT4lCiAgYXJyYW5nZSgoQ0VOVF9ESUZGKSkKYGBgCgoKIyBGcmVxdWVuY3kgdnMuIG5ldHdvcmtzCgojIyBGcmVxdWVuY3kgdnMuIGNlbnRyYWxpemF0aW9uCgojIyMgUGxvdAoKYGBge3J9CnBsdCA8LSBkZl9jb21wICU+JQogIGZpbHRlcigKICAgIFNVQlNFVCA9PSAnZm91cicsCiAgICAjIFVTRVNfVE9UICVpbiUgKDE1MDAwMDo1MDAwMDApCiAgICAjIExFTU1BICVpbiUgYyhjYXNlcykKICAgICMgIUxFTU1BICVpbiUgYygnc2x1dCBzaGFtaW5nJywgJ2Rhc2hjYW0nLCAnc2hhcmVhYmxlJywgJ2N1Y2tvbGQnLCAnZGVlcCBsZWFybmluZycsICdoeXBlcmxvY2FsJykKICAgICkgJT4lCiAgc2VsZWN0KExFTU1BLCBDRU5UX0RFR1JFRSwgVVNFU19UT1QsIFVTRVMsIEVER0VTKSAlPiUKICBnZ3Bsb3QoLiwgYWVzKHg9Q0VOVF9ERUdSRUUsIHk9VVNFU19UT1QpKSArCiAgICBnZW9tX3RleHQoYWVzKGxhYmVsPUxFTU1BKSwgaGp1c3Q9LTAuMSwgdmp1c3Q9LTAuMSkgKyAKICAgICMgZ2VvbV9wb2ludCgpICsKICAgIHNjYWxlX3lfY29udGludW91cygKICAgICAgJ3VzYWdlIGZyZXF1ZW5jeSAobG9nKScsIAogICAgICB0cmFucz0nbG9nJwogICAgICApICsKICAgIHNjYWxlX3hfY29udGludW91cygKICAgICAgJ2RlZ3JlZSBjZW50cmFsaXphdGlvbicKICAgICAgIyB0cmFucz0nbG9nJwogICAgICApCgpnZ3Bsb3RseShwbHQpCiMgZ2dzYXZlKCdvdXQvZnVsbF9jZW50X2ZyZXFfb3ZlcmFsbC5wZGYnLCB3aWR0aD02LCBoZWlnaHQ9NCkKIyBnZ3NhdmUoJ291dC9jYXNlc19jZW50X2ZyZXFfb3ZlcmFsbC5wZGYnLCB3aWR0aD02LCBoZWlnaHQ9NCkKYGBgCgoKIyMjIEJpZ2dlc3QgZGlzY3JlcGFuY2llcwoKYGBge3J9CmRmX2NvbXAgJT4lCiAgZmlsdGVyKAogICAgU1VCU0VUVElORyA9PSAndGltZScsCiAgICBTVUJTRVQgPT0gJ2ZvdXInCiAgICApICU+JQogIHNlbGVjdChMRU1NQSwgVVNFU19UT1QsIENFTlRfREVHUkVFKSAlPiUKICBtdXRhdGUoRElTQyA9IFVTRVNfVE9UIC8gQ0VOVF9ERUdSRUUpICU+JQogIGFycmFuZ2UoRElTQykKYGBgCgoKIyMjIENvcnJlbGF0aW9uCgpgYGB7cn0KZGZfY29yciA8LSBkZl9jb21wICU+JQogIGZpbHRlcigKICAgICMgU1VCU0VUICE9ICdmdWxsJwogICAgIyBFREdFUyA+PSAxMDAKICAgICkgJT4lCiAgc2VsZWN0KC1jKExFTU1BLCBTVUJTRVQsIFNUQVJULCBFTkQsIFNLSVAsIFNUQU1QKSkKICAKY29yLnRlc3QoZGZfY29yciRVU0VTLCBkZl9jb3JyJENFTlRfREVHUkVFKQpgYGAKCgojIENvZWZmaWNpZW50IG9mIHZhcmlhdGlvbgoKYGBge3J9CmRmX2NvbXAgJT4lCiAgZmlsdGVyKAogICAgU1VCU0VUID09ICdmdWxsJywKICAgIFVTRVNfVE9UID49IDEwMDAKICAgICkgJT4lCiAgc2VsZWN0KExFTU1BLCBVU0VTX1RPVCwgQ09FRl9WQVIpICU+JQogIGFycmFuZ2UoZGVzYyhDT0VGX1ZBUikpCmBgYAoKCiMgUHJvY2Vzc2luZyBzdGF0dXMKCiMjIExlbW1hIGxpc3QKCmBgYHtyfQpkZl9jb21wICU+JQogIHNlbGVjdChMRU1NQSwgU1VCU0VULCBTVEFNUCkgJT4lCiAgZmlsdGVyKFNVQlNFVCA9PSAnZm91cicpICU+JQogICMgbXV0YXRlKFNUQU1QID0gYXNfZGF0ZXRpbWUoU1RBTVApKSAlPiUKICBhcnJhbmdlKGRlc2MoU1RBTVApKQpgYGAKCgojIyBEYXRhc2V0IHN0YXRpc3RpY3MKCmBgYHtyfQpkZl9jb21wICU+JQogIGZpbHRlcihTVUJTRVQgPT0gJ2Z1bGwnKSAlPiUKICBzZWxlY3QoTEVNTUEsIFNVQlNFVCwgVVNFU19UT1QsIFVTRVJTX1RPVCkgJT4lCiAgZHBseXI6OnN1bW1hcmlzZSgKICAgIFVTRVNfQUxMID0gc3VtKFVTRVNfVE9UKSwKICAgIFVTRVJTX0FMTCA9IHN1bShVU0VSU19UT1QpCiAgICApCmBgYA==